iT邦幫忙

0

Tofy開發日誌 #3

  • 分享至 

  • xImage
  •  

今天就別廢話了,直接進入主題

Tofy開發日誌 #3

時間 2024/9/22 下午10:08
地點 我房間


今天早上終於把芙莉蓮追完了,所以下午就調整了一下UI的顯示以及字體大小之類的小東西,那都提到了UI,今天就來講講只會顯示在用戶端的ScreenGui吧!

ScreenGui的顯示方法有很多,但如果要讓UI顯示在玩家的螢幕上,則需要在"StarterGui"中新增一個"ScreenGui"(如圖)
https://ithelp.ithome.com.tw/upload/images/20240922/20169664lGIHAqAHyw.png

接著,就可以在ScreenGui中新增需要的物件了,那因為物件的名稱都很好懂(例如TextLabel、TextBox、TextButton、ImageLabel、ImageButton....之類的,功能都是字面上的意思),所以今天就不介紹屬性這塊了。今天主要會著重在Script的部分。

其實在Script中,要控制一個UI的屬性非常的簡單,請看下方程式碼

local Frame = script.Parent
Frame.Visible = False

這是一個控制UI是否要顯示的一段程式碼,稍微解釋一下各個名詞的意思

local 定義變數(定義後方需要有一個=,=左方為變數名稱,=右方為變數值)

script Script本身

Parent 母項

. 的

Visible 是否顯示(是為True,否為False)

當然,如果不想要在玩家進入遊戲後就把UI顯示給玩家,我們可以使用以下程式碼

local Frame = script.Parent
Frame.Visible = False

if --事件  then
    Frame.Visible = True
end

在第一篇日誌有提過,--為註解

甚至,若你想要只讓部分玩家的UI顯示,可以直接把UI複製一份到指定的客戶端,請看下列程式碼

local ScreenGui = game.Workspace.ScreenGui --給定一個路徑,你可以把它放在任何地方,這邊就先以Workspace舉例

Workspace.Part.Touched:Connect(function(Hit --這邊放入的是要作用於此function的對象)
	local Player = game.Players:GetPlayerFromCharacter(hit.Parent) --取得玩家
    ScreenGui:Clone.Parent = Player.PlayerGui
)

上面的這段程式碼可能有點難懂,因為多了許多指令,各項指令的解釋為

:GetPlayerFromCharacter() 取得玩家資訊(以上面的程式碼為例,function要作用的對象叫做Hit,而function的觸發條件為: 當一個在"Workspace"名為"Part"的部件被"Touch了",那function觸發的對象就會是Hit,但這個Hit並不會是一個名為"Player"的物件,因為玩家是由各種不同的部件所組成的模型,所以Hit僅能代表碰到Part的部件,例如手臂、腳掌,頭、軀幹等等。所以必須要使用此指令來獲取玩家資訊,而在遊戲中玩家的模型的ClassName為"Character",而此指令就是從此Character來尋找遊戲中與此Character名稱相符的玩家,進而取得玩家的資料。)

:Connect 連結(這個指令與function息息相關,上面的寫法為在連結function的同時定義一個function,當然也可以先定義完再連結,總之他所扮演的角色就是連結事件以及function。)

Touched 觸碰(基本上只要是個模型都可以使用這個指令,判斷的依據就是此物件是否有被碰到,不管被什麼,除了空氣,畢竟Roblox裡沒有這東西)

:Clone 複製(將運行此指令的對象複製一份,但如果沒有給他一個母項,則此指令無效,像上面的程式碼給定的母項為PlayerGui,當然也是可以先複製在給定母項,只要把複製的物件儲存在一個變數值裡面就可以)

Clone指令的另一種寫法

local ScreenGui = game.Workspace.ScreenGui
local ScreenGuiClone = ScreenGui:Clone --將ScreenGui複製到此Value

Workspace.Part.Touched:Connect(function(Hit --這邊放入的是要作用此function的對象)
	local Player = game.Players:GetPlayerFromCharacter(hit.Parent) --取得玩家
    ScreenGuiClone.Parent = Player.PlayerGui --給定在變數值裡面的ScreenGuiClone的母項
)

以及function的另一種寫法

local ScreenGui = game.Workspace.ScreenGui

function CloneGui(Hit) --定義此function的名稱,如果使用第一個程式碼的寫法則不須定義名稱
    local Player = game.Players:GetPlayerFromCharacter(hit.Parent)
    ScreenGui:Clone.Parent = Player.PlayerGui
end

Workspace.Part.Touched:Connect(CloneGui) --連結function

那以上就是ScreenGui的基本介紹,因為ScreenGui與其他的UI的屬性基本一致,所以如果會使用ScreenGui那基本上使用其他的UI也是不會有太大的問題,需要注意的是,如果要調整客戶端的UI,則路徑應使用PlayerGui而不是StarterGui,因為StarterGui所管理的是玩家一進入遊戲時要顯示的UI,而PlayerGui所管理的是目前顯示在客戶端的UI,這是新手非常常犯的錯誤(連我第一次使用也搞不懂StarterGui與PlayerGui的差別),所以如果在製作關於UI的Script時UI沒有進行你所表達的指令的話,不妨檢查一下是否把PlayerGui與StarterGui搞混了喔~

以上為今日的日誌,明天我可能會做一些新的東西。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言